home *** CD-ROM | disk | FTP | other *** search
/ MacFormat España 15 / macformat_15.iso / C de cerca / Codewarrior Lite / MacOS Support / Headers / ANSI Headers / string < prev    next >
Text File  |  1995-12-29  |  7KB  |  195 lines

  1. // string standard header
  2. #ifndef _STRING_
  3. #define _STRING_
  4. #include <istream>
  5. #include <ostream>
  6.  
  7. #if __MWERKS__
  8. #pragma options align=mac68k
  9.  
  10. #if __CFM68K__ && __USING_IMPORTED_ANSI__
  11. #pragma import on
  12. #endif
  13. #endif
  14.  
  15.         // class string
  16. class string {
  17. public:
  18.     string()
  19.         {_Tidy(); }
  20.     string(size_t _N, capacity _C)
  21.         {_Tidy(), _Res = _N;
  22.         if (_C == default_size)
  23.             assign('\0', _N); }
  24.     string(const string& _X, size_t _P = 0, size_t _N = NPOS)
  25.         {_Tidy(), assign(_X, _P, _N); }
  26.     string(const char *_S, size_t _N = NPOS)
  27.         {_Tidy(), assign(_S, _N); }
  28.     string(char _C, size_t _N = 1)
  29.         {_Tidy(), assign(_C, _N); }
  30.     string(unsigned char _C, size_t _N = 1)
  31.         {_Tidy(), assign((char)_C, _N); }
  32. #if _HAS_SIGNED_CHAR
  33.     string(signed char _C, size_t _N = 1)
  34.         {_Tidy(), assign((char)_C, _N); }
  35. #endif /* _HAS_SIGNED_CHAR */
  36.     ~string()
  37.         {_Tidy(1); }
  38.     string& operator=(const string& _X)
  39.         {return (assign(_X)); }
  40.     string& operator=(const char *_S)
  41.         {return (assign(_S)); }
  42.     string& operator=(char _C)
  43.         {return (assign(_C)); }
  44.     string& operator+=(const string& _X)
  45.         {return (append(_X)); }
  46.     string& operator+=(const char *_S)
  47.         {return (append(_S)); }
  48.     string& operator+=(char _C)
  49.         {return (append(_C)); }
  50.     string& append(const string&, size_t = 0, size_t = NPOS);
  51.     string& append(const char *, size_t = NPOS);
  52.     string& append(char, size_t = 1);
  53.     string& assign(const string&, size_t = 0, size_t = NPOS);
  54.     string& assign(const char *, size_t = NPOS);
  55.     string& assign(char, size_t = 1);
  56.     string& insert(size_t, const string&, size_t = 0,
  57.         size_t = NPOS);
  58.     string& insert(size_t, const char *, size_t = NPOS);
  59.     string& insert(size_t, char, size_t = 1);
  60.     string& remove(size_t = 0, size_t = NPOS);
  61.     string& replace(size_t, size_t, const string&,
  62.         size_t = 0, size_t = NPOS);
  63.     string& replace(size_t, size_t, const char *,
  64.         size_t = NPOS);
  65.     string& replace(size_t, size_t, char, size_t = 1);
  66.     char get_at(size_t) const;
  67.     void put_at(size_t, char);
  68.     char operator[](size_t _N) const
  69.         {return (_Ptr[_N]); }
  70.     char& operator[](size_t _N)
  71.         {return (_Ptr[_N]); }
  72.     const char *c_str() const
  73.         {return (_Ptr != 0 ? _Ptr : ""); }
  74.     size_t length() const
  75.         {return (_Len); }
  76.     void resize(size_t _N, char _C = 0)
  77.         {_N <= _Len ? remove(_N) : append(_C, _N - _Len); }
  78.     size_t reserve() const
  79.         {return (_Res); }
  80.     void reserve(size_t _N)
  81.         {if (_Ptr == 0)
  82.             _Res = _N; }
  83.     size_t copy(char *, size_t, size_t = 0);
  84.     size_t find(const string& _X, size_t _P = 0) const
  85.         {return (find(_X.c_str(), _P, _X.length())); }
  86.     size_t find(const char *_S, size_t _P = 0,
  87.         size_t _N = NPOS) const;
  88.     size_t find(char _C, size_t _P = 0) const
  89.         {return (find((const char *)&_C, _P, 1)); }
  90.     size_t rfind(const string& _X, size_t _P = NPOS) const
  91.         {return (rfind(_X.c_str(), _P, _X.length())); }
  92.     size_t rfind(const char *, size_t = NPOS, size_t = NPOS)
  93.         const;
  94.     size_t rfind(char _C, size_t _P = NPOS) const
  95.         {return (rfind((const char *)&_C, _P, 1)); }
  96.     size_t find_first_of(const string& _X, size_t _P = 0) const
  97.         {return (find_first_of(_X.c_str(), _P, _X.length())); }
  98.     size_t find_first_of(const char *, size_t = 0,
  99.         size_t = NPOS) const;
  100.     size_t find_first_of(char _C, size_t _P = 0) const
  101.         {return (find((const char *)&_C, _P, 1)); }
  102.     size_t find_last_of(const string& _X, size_t _P = NPOS)
  103.         const
  104.         {return (find_last_of(_X.c_str(), _P, _X.length())); }
  105.     size_t find_last_of(const char *, size_t = NPOS,
  106.         size_t = NPOS) const;
  107.     size_t find_last_of(char _C, size_t _P = NPOS) const
  108.         {return (rfind((const char *)&_C, _P, 1)); }
  109.     size_t find_first_not_of(const string& _X,
  110.         size_t _P = 0) const
  111.         {return (find_first_not_of(_X.c_str(), _P,
  112.             _X.length())); }
  113.     size_t find_first_not_of(const char *, size_t = 0,
  114.         size_t = NPOS) const;
  115.     size_t find_first_not_of(char _C, size_t _P = 0) const
  116.         {return (find_first_not_of((const char *)&_C, _P, 1)); }
  117.     size_t find_last_not_of(const string& _X,
  118.         size_t _P = NPOS) const
  119.         {return (find_last_not_of(_X.c_str(), _P,
  120.             _X.length())); }
  121.     size_t find_last_not_of(const char *, size_t = NPOS,
  122.         size_t = NPOS) const;
  123.     size_t find_last_not_of(char _C, size_t _P = NPOS) const
  124.         {return (find_last_not_of((const char *)&_C, _P, 1)); }
  125.     string substr(size_t _P = 0, size_t _N = NPOS) const
  126.         {return (string(*this, _P, _N)); }
  127.     int compare(const string&, size_t = 0, size_t = NPOS) const;
  128.     int compare(const char *, size_t = 0, size_t = NPOS) const;
  129.     int compare(char, size_t = 0, size_t = 1) const;
  130. private:
  131.     _Bool _Grow(size_t, _Bool = 0);
  132.     void _Tidy(_Bool = 0);
  133.     void _Xlen() const
  134.         {lengtherror("string too long").raise(); }
  135.     void _Xran() const
  136.         {outofrange("invalid string position").raise(); }
  137.     char *_Ptr;
  138.     size_t _Len, _Res;
  139.     };
  140. inline string operator+(const string& _L, const string& _R)
  141.     {return (string(_L) += _R); }
  142. inline string operator+(const char *_L, const string& _R)
  143.     {return (string(_L) += _R); }
  144. inline string operator+(char _L, const string& _R)
  145.     {return (string(_L) += _R); }
  146. inline string operator+(const string& _L, const char *_R)
  147.     {return (string(_L) += _R); }
  148. inline string operator+(const string& _L, char _R)
  149.     {return (string(_L) += _R); }
  150. inline _Bool operator==(const string& _L, const string& _R)
  151.     {return (_L.compare(_R) == 0); }
  152. inline _Bool operator==(const char * _L, const string& _R)
  153.     {return (_R.compare(_L) == 0); }
  154. inline _Bool operator==(char _L, const string& _R)
  155.     {return (_R.compare(_L) == 0); }
  156. inline _Bool operator==(const string& _L, const char *_R)
  157.     {return (_L.compare(_R) == 0); }
  158. inline _Bool operator==(const string& _L, char _R)
  159.     {return (_L.compare(_R) == 0); }
  160. inline _Bool operator!=(const string& _L, const string& _R)
  161.     {return (!(_L == _R)); }
  162. inline _Bool operator!=(const char *_L, const string& _R)
  163.     {return (!(_L == _R)); }
  164. inline _Bool operator!=(char _L, const string& _R)
  165.     {return (!(_L == _R)); }
  166. inline _Bool operator!=(const string& _L, const char *_R)
  167.     {return (!(_L == _R)); }
  168. inline _Bool operator!=(const string& _L, char _R)
  169.     {return (!(_L == _R)); }
  170. istream& operator>>(istream&, string&);
  171. istream& getline(istream&, string&, char = '\n');
  172. inline ostream& operator<<(ostream& _O, const string& _X)
  173.     {return (_O.write(_X.c_str(), _X.length())); }
  174.  
  175. #if __MWERKS__
  176. #if __CFM68K__ && __USING_IMPORTED_ANSI__
  177. #pragma import reset
  178. #endif
  179.  
  180. #pragma options align=reset
  181. #endif
  182.  
  183. #endif
  184.  
  185. /*
  186.  * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED. 
  187.  * Consult your license regarding permissions and restrictions.
  188.  */
  189.  
  190. /* Change log:
  191.  *94June04 PlumHall baseline
  192.  *94Sept30 Applied diffs for Thu Aug 25 23:25:44 1994
  193.  *94Oct08 Inserted MW changes.
  194.  */
  195.